package com.physics.mps.module.ansys.vo;

import lombok.Data;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * ansys计算参数
 * @author mcsoft
 * @since 2023/11/1
 */
@Data
public class AnsysSolveVo {
    /**
     * 任务id
     */
    private String taskId;

    /**
     * 软件id
     */
    private String appId;

    /**
     * 模块id
     */
    private String appModuleId;

    /**
     * 任务名称
     */
    private String taskName;

    /**
     * 模型前处理参数
     */
    private SpaceClaimVo spaceClaimVo;

    /**
     * 网格参数
     */
    private MeshVo meshVo;

    /**
     * 部件所有参数，包括体网格尺寸，材料属性，是否是固流体
     */
    private List<PartVo> partVos;

    /**
     * 电路板部件名
     */
    private String board;

    /**
     * 更新前的部件名，即来自前端的部件名，用于生成显示结果的代码，以及部件类型solid or fluid
     */
    private Map<String, String> partNames;

    /**
     * 重力加速度方向
     */
    private String gravityDirection;

    /**
     * pressure outlet回流温度
     */
    private String t0;

    /**
     * 运行核数
     */
    private String process;

    /**
     * 导出路径
     */
    private String exportPath;

    /**
     * 默认部件属性
     */
    private PartVo defaultPartVo;

    /**
     * 前端显示的部件名称和ansys中显示的部件名称对应
     */
    private Map<String, String> corresponding;

    /**
     * 根据重力加速度方向生成对应的填充脚本
     * @return
     */
    public String getGravityDirection() {
        switch (gravityDirection) {
            case "x":
                return "[9.81, 0., 0.]";
            case "-x":
                return "[-9.81, 0., 0.]";
            case "y":
                return "[0., 9.81, 0.]";
            case "-y":
                return "[0., -9.81, 0.]";
            case "z":
                return "[0., 0., 9.81]";
            case "-z":
                return "[0., 0., -9.81]";
        }
        return "";
    }

    /**
     * 部件名称转换成填充固定格式脚本(已过时)
     * @return
     */
    public String partNameToString() {
        StringBuilder builder = new StringBuilder();
        builder.append("[");
        for (PartVo partVo : partVos) {
            if ("solid".equals(partVo.getType())) {
                builder.append("\"").append(partVo.getBodyname()).append("\",");
            }
        }
        builder.deleteCharAt(builder.length() - 1);
        return builder.append("]").toString();
    }
}
